import pandas as pd
import os
from collections import defaultdict
class table:
    def __init__(self,path) -> None:
        """
        path 输入文件地址
        """
        self.path = path
        if(os.path.exists(path)==False):
            print("excel文件路径不对")
            raise Exception("路径不存在·")
        self.initial_data = pd.read_excel(path)
        self.sourceColumns = self.initial_data.columns
    #将各个地区数据区分到不同的表内
    def reGroup(self,cols=[1],out_path = './groups/'):
        """
            cols 时间列
            out_path 输出文件地址
        """
        # key 是 类别名（组合，用“_”分割），value是df数据行
        row_map = defaultdict(list)
        for row_index in range(self.initial_data.shape[0]):
            name = ""
            for col_index in cols:
                name+=self.initial_data.loc[row_index][self.sourceColumns[col_index]]
                name+="_"
            row_map[name].append(self.initial_data.loc[row_index:row_index])
        for name in row_map.keys():
            #声明新的表格
            resDf = pd.DataFrame(columns=self.sourceColumns)
            #将本类的记录逐行写入
            for rowdata in row_map[name]:
                resDf = pd.concat([resDf,rowdata])
                # print(resDf.shape)
            #保存当前类的表格
            resDf.to_excel(out_path+name+'.xlsx', index=False)
    #去重
    def unique(self , cols=[1,2,3,9,10],time_col=16,out_path="./",time_diff = 2):
        '''
        cols 列号
        time_col 时间列
        out_path 输出文件夹地址
        time_diff 时差
        '''

        self.initial_data['保留时间']=\
            pd.to_datetime(self.initial_data.loc[1:,self.sourceColumns[time_col]]).dt.strftime('%Y-%m-%d')
        self.sourceColumns = self.initial_data.columns
        cols.append(time_col)
        keys = list(self.sourceColumns[cols])
        #先分组，每组内的数据就是重复的，然后按照时间从大到小排序，最后取最大的那个
        unique_table = self.initial_data.groupby(keys).apply(lambda x: x.sort_values("保留时间" ,ascending=False).iloc[0, :])
        unique_table.to_excel(out_path+"table_去重后"+'.xlsx', index=False)

def test():
    #数据分组
    excelObj1 = table("./1067.xlsx")
    excelObj1.reGroup([3])
    #数据去重
    excelObj2 = table("./1066.xlsx")
    excelObj2.unique(cols=[1,2],time_col=4)

# #数据分组
# excelObj1 = table("./1067.xlsx")
# excelObj1.reGroup([3],out_path = './groups/')
# #数据去重
# excelObj2 = table("./1066.xlsx")
# excelObj2.unique(cols=[1,2],time_col=4,out_path="./",time_diff = 2)
        

            
            

            
            
            
        